#include <mesh/physics.h>
#include <mesh/object.h>
#include <app/Atime.h>
#include <app/ameTypes.h>

#include <vector>
#include <math.h>


Physics::Physics ( Object& thisObj, Atime& time, std::vector <Object*>& objects ) {
    Physics::object = &thisObj;
    Physics::time = &time;
    Physics::objects = objects;
}


/*
 * Идет цикл, количество итераций которого равно размеру массива всех объектов,
 * который иницилизировал разработчик в конструкторе класса Physics. В нём создаётся
 * вектор трехмерного пространства, в которое мы записываем координаты объекта, с 
 * которым собираемся сравнивать позиции, затем вещественную переменную double, в
 * которой будет храниться расстояние от нашего объекта до чужого.
 * 
 * Далее переменной дистанции присвается квадратный корень из суммы разностей 
 * координат по каждой оси.
 * 
 * Потом идёт проверка - объект, с которым будет производиться работа находится
 * в отрицательных координатах или положительных. Если он находится на большем
 * расстоянии, чем проверка коллизии (collisionRadius), то объект пропускается,
 * а цикл продолжается, иначе вызывается функция, которая будет уже просчитывать
 * коллизию по полигонам.
*/
void Physics::Update () {
    for ( int i = 0; i <= objects.size (); i++ ) {
        ame::vec3 objPosition; //позиция объекта, с которым мы будем работать
        double distance;
        
        objPosition.x = objects [i] -> transform.getLocation().x;
        objPosition.y = objects [i] -> transform.getLocation().y;
        objPosition.z = objects [i] -> transform.getLocation().z;
        
        //formula example: https://algebra24.ru/rasstojanie-mezhdu-dvumja-tochkami
        distance = sqrt ( pow ( object->transform.getLocation().x - objects [i]->transform.getLocation().x, 2 ) + 
            pow ( object->transform.getLocation().y - objects [i]->transform.getLocation().y, 2 ) +
            pow ( object->transform.getLocation().z - objects [i]->transform.getLocation().z, 2 )
        );
        /*
        if ( distance > objects [i] -> collider.collisionRadius ) {
            continue;
        } else if ( -distance > objects [i] -> collider.collisionRadius ) {
            continue;
        } else {
            //
        }*/
    }
}
